AUTO_PTR := auto_ptr.cc
AUTO_PTR_BASE := $(basename $(AUTO_PTR))

UNIQUE_PTR := unique_ptr.cc
UNIQUE_PTR_BASE := $(basename $(UNIQUE_PTR))

SHARED_PTR := shared_ptr.cc
SHARED_PTR_BASE := $(basename $(SHARED_PTR))

WEAK_PTR := weak_ptr.cc
WEAK_PTR_BASE := $(basename $(WEAK_PTR))

$(AUTO_PTR_BASE):$(AUTO_PTR)
	@g++ -o $@ $^ -std=c++11

$(UNIQUE_PTR_BASE):$(UNIQUE_PTR)
	@g++ -o $@ $^ -std=c++11

$(SHARED_PTR_BASE):$(SHARED_PTR)
	@g++ -o $@ $^ -std=c++11

$(WEAK_PTR_BASE):$(WEAK_PTR)
	@g++ -o $@ $^ -std=c++11

.PHONY:auto_ptr unique_ptr shared_ptr weak_ptr
auto_ptr:$(AUTO_PTR_BASE)
unique_ptr:$(UNIQUE_PTR_BASE)
shared_ptr:$(SHARED_PTR_BASE)
weak_ptr:$(WEAK_PTR_BASE)

.PHONY:clean
clean:
	@rm -f $(AUTO_PTR_BASE) $(UNIQUE_PTR_BASE) $(SHARED_PTR_BASE) $(WEAK_PTR_BASE)
